/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Dao;

import Pojo.Aluno;
import Pojo.Disciplina;
import Pojo.Historico;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 *
 * @author Ronan Lopes
 */
public class HistoricoDaoImplJPA implements HistoricoDao {
        /**
	 * Adicionar um Histórico ao banco de dados de Históricos
	 * @param historico
	 * @return true ou false indicando sucesso ou não
	 */
	public boolean inserir(Historico historico){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                em.persist(historico);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
        }
        /**
	 * Remover Historico do banco de dados de Históricos
	 * @param historico
	 * @return true ou false indicando sucesso ou não
	 */
	public boolean remover(Historico historico){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                Historico historicoAux = em.find(Historico.class, historico.getId());
                em.remove(historicoAux);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
        }
        
         /**
	 * alterar Histórico do banco de dados de Históricos
	 * @param historico
	 * @return true ou false indicando sucesso ou não
	 */
         public boolean alterar(Historico historico){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            try{
                tx.begin();
                em.merge(historico);
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(false);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(true);
         }
         
        /**
	 * Pesquisa de Alunos passando o aluno e a disciplina
	 * @param idAluno
	 * @param idDisciplina
	 * @return Aluno cujo cpf é o que foi passado, ou um null indicando que nenhum aluno foi encontrado
	 */
	public Historico pesquisarPorAlunoEDisciplina(Aluno aluno, Disciplina disciplina){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            Historico historico = null;
            try{
                tx.begin();
                Query query = em.createQuery("select h from Historico h where h.aluno = :aluno and h.disciplina = :disciplina");
                query.setParameter("aluno", aluno);
                query.setParameter("disciplina", disciplina);
                historico = (Historico) query.getSingleResult();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(historico);
        }
        
        /**
	 * Pesquisa de Alunos passando o aluno e a disciplina
	 * @param Aluno
	 * @return lista de historicos do alunos
	 */
	public List<Historico> pesquisarPorAluno(Aluno aluno){
            EntityManager em = PersistenciaUtil.getEntityManager();
            EntityTransaction tx = em.getTransaction();
            List<Historico> listaHistoricos = null;
            try{
                tx.begin();
                Query query = em.createQuery("select h from Historico h where h.aluno = :aluno");
                query.setParameter("aluno", aluno);
                listaHistoricos = query.getResultList();
                tx.commit();
            }catch(Exception e){
                if ((tx != null)&&(tx.isActive())){
                    tx.rollback();
                    return(null);
                }
            }finally{
                PersistenciaUtil.fecharConexao(em);
            }
            return(listaHistoricos);
        }
}
